package br.com.pontoe.model.persistencia;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.pontoe.model.conexao.Conexao;
import br.com.pontoe.model.entidades.Bairro;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

/**
 * DAO para entidade Bairro
 * 
 * @author Cleison
 * @version 1.0
 * @since 07/05/2010
 */
public class BairroDAO implements DAOInterface<Bairro> {

	private StringBuilder sql = new StringBuilder();
	private Connection con = null;
	private PreparedStatement stm = null;

	@Override
	public int adicionar(Bairro entidade) throws SQLException {
		int ret = -1;

		try {
			sql = new StringBuilder();
			sql.append("INSERT INTO BAIRRO (IDBAIRRO, NOME, IDCIDADE) ");
			sql.append("VALUES (NULL, \'?\', ?)");

			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());

			stm.setString(1, entidade.getNome());
			stm.setInt(2, entidade.getCidade().getId());

			ret = stm.executeUpdate();
		} 
		finally {
			stm.close();
			con.close();
		}
		return ret;
	}

	@Override
	public boolean atualizar(Bairro entidade) throws SQLException {
		boolean ret = true;

		try {
			sql = new StringBuilder();
			sql.append("UPDADE BAIRRO ");
			sql.append("SET   NOME = \'?\', IDCIDADE = ? ");
			sql.append("WHERE IDBAIRRO = ? ");

			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());

			stm.setString(1, entidade.getNome());
			stm.setInt(2, entidade.getCidade().getId());
			stm.setInt(3, entidade.getId());

			ret = stm.execute();
		}
		finally {
			stm.close();
			con.close();
		}
		return ret;
	}

	@Override
	public Bairro localizar(int id) throws SQLException {
		Bairro ret = null;

		try {
			sql = new StringBuilder();
			sql.append("SELECT  IDBAIRRO, NOME, IDCIDADE ");
			sql.append("FROM 	BAIRRO ");
			sql.append("WHERE 	IDBAIRRO = ? ");

			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());
			stm.setInt(1, id);

			ResultSet temp = stm.executeQuery();
			CidadeDAO cTmp = new CidadeDAO();

			if (temp.next()) {
				ret = new Bairro();
				ret.setId(temp.getInt("IDBAIRRO"));
				ret.setNome(temp.getString("NOME"));
				ret.setCidade(cTmp.localizar(temp.getInt("IDCIDADE")));
			}
			temp.close();
		} finally {
			stm.close();
			con.close();
		}
		return ret;
	}

	@Override
	public List<Bairro> localizarTodos() throws SQLException {
		List<Bairro> ret = new ArrayList<Bairro>();

		try {
			sql = new StringBuilder();
			sql.append("SELECT  IDBAIRRO, NOME, IDCIDADE ");
			sql.append("FROM 	BAIRRO ");

			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());

			ResultSet temp = stm.executeQuery();
			CidadeDAO cTmp = new CidadeDAO();

			while (temp.next()) {
				Bairro b = new Bairro();
				b.setId(temp.getInt("IDBAIRRO"));
				b.setNome(temp.getString("NOME"));
				b.setCidade(cTmp.localizar(temp.getInt("IDCIDADE")));

				ret.add(b);
			}
			temp.close();
		} finally {
			stm.close();
			con.close();
		}
		return ret;
	}

	@Override
	public boolean remover(Bairro entidade) throws SQLException {
		boolean ret = true;

		try {
			sql = new StringBuilder();
			sql.append("DELETE FROM BAIRRO ");
			sql.append("WHERE IDBAIRRO = ? ");

			con = Conexao.getInstance().getConnection();
			stm = (PreparedStatement) con.prepareStatement(sql.toString());
			stm.setInt(1, entidade.getId());

			ret = stm.execute();
		} finally {
			stm.close();
			con.close();
		}
		return ret;
	}
}